如何在 SPSS 中创建哑变量
By Ruben Geert van den Berg under Regression
在线性回归中,你不能直接使用分类变量作为预测变量:你需要将它们分解成二分变量,也就是所谓的哑变量(Dummy Variables)。
创建哑变量的理想方式是使用我们的 哑变量工具。如果你不想使用这个工具,本教程将展示如何手动正确地完成这项任务。
- 示例 I - 任何数值变量
- 示例 II - 相邻整数的数值变量
- 示例 III - 带有转换的字符串变量
- 示例 IV - 没有转换的字符串变量
示例数据文件
本教程通篇使用 staff.sav 数据文件。该数据文件的一部分如下所示。
示例 I - 任何数值变量
首先,我们为 marit
创建哑变量,marit
是婚姻状况(marital status)的缩写。我们的第一步是运行一个基本的 FREQUENCIES 频率表,命令是 frequencies marit.
。下表显示了结果。
那么如何将婚姻状况分解为哑变量呢?首先,我们总是省略一个类别,即参考类别 (Reference Category)。你可以选择任何类别作为参考类别。
在这个例子中,我们选择 5 (丧偶 Widowed)。这意味着我们将创建 3 个哑变量来表示类别 1、2 和 4(注意变量中没有 3 这个值)。
下面的 语法 (Syntax) 显示了如何创建和标记我们的 3 个哑变量。运行它。
***为类别 1、2 和 4 创建哑变量。**
compute marit_1 = (marit = 1).
compute marit_2 = (marit = 2).
compute marit_4 = (marit = 4).
***为哑变量应用变量标签。**
variable labels
marit_1 '婚姻状况 = 从未结婚 (Marital Status = Never Married)'
marit_2 '婚姻状况 = 目前已婚 (Marital Status = Currently Married)'
marit_4 '婚姻状况 = =离异 (Marital Status = Divorced)'.
***快速检查第一个哑变量**
frequencies marit_1.
结果
首先,注意我们在活动数据集(Active Dataset)中创建了 3 个带有标签的哑变量。
下表显示了我们第一个哑变量的频率分布。
注意,我们的哑变量包含 3 个不同的值:
- 婚姻状况不是“从未结婚”的受访者得分为 0;
- 婚姻状况为“从未结婚”的受访者得分为 1;
- 婚姻状况为缺失值(因此未知)的受访者具有系统缺失值。
现在,我们可以通过运行 crosstabs marit by marit_1 to marit_4.
来更彻底地检查结果。这样做会创建 3 个列联表,其中第一个如下所示。
在我们的哑变量中,
婚姻状况不是“从未结婚”的受访者都得分为 0;
“从未结婚”的受访者都得分为 1;
我们的样本量为 N = 170(此表仅包括两个变量都没有缺失值的受访者)。
可选地,一个最终的 - 非常彻底的 - 检查是将原始变量的 方差分析 (ANOVA) 结果与使用我们的哑变量的回归结果进行比较。以下语法正是这样做的,使用月薪作为因变量。
***使用哑变量的最小回归。**
regression
/dependent salary
/method enter marit_1 to marit_4.
***使用原始变量的最小方差分析。**
oneway salary by marit.
请注意,这两个分析都会产生相同的 ANOVA 表。我们将在以后的教程中更彻底地讨论 ANOVA 与哑变量回归。
示例 II - 相邻整数的数值变量
现在,我们将为 region
创建哑变量。同样,我们首先检查一个最小频率表,我们将通过运行 frequencies region.
来创建它。结果如下表所示。
我们将选择 1(“北方 North”)作为我们的参考类别。因此,我们将为类别 2 到 5 创建哑变量。由于这些是相邻的整数,我们可以使用 DO REPEAT
来加快速度,如下所示。
***为 region 类别 2 到 5 创建哑变量。**
do repeat #vals = 2 to 5 / #vars = region_2 to region_5.
recode region (#vals = 1)(lo thru hi = 0) into #vars.
end repeat print.
***将变量标签应用于新变量。**
variable labels
region_2 '区域 = 东部 (Region = East)'
region_3 '区域 = 南部 (Region = South)'
region_4 '区域 = 西部 (Region = West)'
region_5 '区域 = 前四城市 (Region = Top 4 City)'.
***快速检查。**
crosstabs region by region_2 to region_5.
仔细检查结果表后,确认所有结果均正确。
示例 III - 带有转换的字符串变量
遗憾的是,我们的前 2 种方法不适用于字符串变量,例如 jtype
- “工作类型 (Job type)”的缩写。最简单的解决方案是将它转换为数值变量,如 SPSS 将字符串转换为数值变量 中所述。以下语法使用 AUTORECODE
来完成这项工作。
***将 jtype 转换为数值变量。**
autorecode jtype
/into njtype.
***检查结果。**
frequencies njtype.
***设置缺失值。**
missing values njtype (1,2).
***重新检查结果。**
frequencies njtype.
结果
由于 njtype
- “数值工作类型 (Numeric Job Type)”的缩写 - 是一个数值变量,我们现在可以使用方法 I 或方法 II 将它分解为哑变量。
示例 IV - 没有转换的字符串变量
将 字符串变量 (String Variables) 转换为数值变量可以很容易地为它们创建哑变量。如果没有这种转换,该过程将很繁琐,因为 SPSS 无法正确处理字符串变量的缺失值。但是,以下语法可以正确完成这项工作。
***检查频率。**
frequencies jtype.
***将 '(Unknown)' 更改为 'NA'。**
recode jtype ('(Unknown)' = 'NA').
***设置用户缺失值。**
missing values jtype ('','NA').
***重新检查频率。**
frequencies jtype.
***为字符串变量创建哑变量。**
if(not missing(jtype)) jtype_1 = (jtype = 'IT').
if(not missing(jtype)) jtype_2 = (jtype = 'Management').
if(not missing(jtype)) jtype_3 = (jtype = 'Sales').
if(not missing(jtype)) jtype_4 = (jtype = 'Staff').
***将变量标签应用于哑变量。**
variable labels
jtype_1 '工作类型 = IT (Job type = IT)'
jtype_2 '工作类型 = 管理 (Job type = Management)'
jtype_3 '工作类型 = 销售 (Job type = Sales)'
jtype_4 '工作类型 = 员工 (Job type = Staff)'.
***检查结果。**
crosstabs jtype by jtype_1 to jtype_4.
最后说明
可以快速轻松地为数值变量创建哑变量。但是,设置正确的变量标签总是需要一些工作。字符串变量 (String Variables)需要一些额外的步骤,但也是可以做到的。
不过,最简单的选择是我们的 SPSS 创建哑变量工具,因为它可以完美地处理所有事情。